package drugdealer.persistencia;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import drugdealer.dados.Pedido;
import drugdealer.dados.Remedio;
import drugdealer.persistencia.exceptions.AlreadyExistsException;
import drugdealer.persistencia.exceptions.DoesNotExistsException;

public class PedidoPersistence extends TablePersistence implements IPedidoPersistence {
	public static String TABLENAME = "pedido"; 
	public static String PRIMARYKEY = "codigo";
	
	public PedidoPersistence(DDPersistence owner) {
		super(owner);
		this.tableName = PedidoPersistence.TABLENAME;
		this.primaryKey = PedidoPersistence.PRIMARYKEY;
		this.createTableStmt =
			"CREATE TABLE IF NOT EXISTS " + PedidoPersistence.TABLENAME + " (" +
			PedidoPersistence.PRIMARYKEY + " integer PRIMARY KEY AUTOINCREMENT," +
			"cod_remedio integer NOT NULL, " +
			"quantidade integer NOT NULL," +
			"FOREIGN KEY (cod_remedio) REFERENCES " +
			RemedioPersistence.TABLENAME + "(" + RemedioPersistence.PRIMARYKEY +
			") ON DELETE CASCADE" +
			")";
	}

	/* (non-Javadoc)
	 * @see drugdealer.persistencia.IPedidoPersistence#get(int)
	 */
	public Pedido get(int codigo) {
		Pedido pedido = null;
		String selectLote = "SELECT * FROM " + PedidoPersistence.TABLENAME + 
				" WHERE " + PedidoPersistence.PRIMARYKEY + "=" + codigo ;
		
		try {
			Statement s = this.ddc.createStatement();
			ResultSet rs = s.executeQuery(selectLote);
			if (rs.next()) {
				pedido = new Pedido(
						rs.getInt(PedidoPersistence.PRIMARYKEY),
						(Remedio) ddc.get(
								DDPersistence.REMEDIO, rs.getInt("cod_remedio")),
						rs.getInt("quantidade"));
			}
			rs.close ();
			s.close ();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return pedido;
	}
	
	/* (non-Javadoc)
	 * @see drugdealer.persistencia.IPedidoPersistence#getPedidos()
	 */
	public Vector<Pedido> getPedidos() {
		Vector<Pedido> list = new Vector<Pedido>();
		String selectList =
			"SELECT * FROM " + PedidoPersistence.TABLENAME;

		System.out.println(selectList);

		try {
			Statement s = this.ddc.createStatement();
			ResultSet rs = s.executeQuery(selectList);

			while (rs.next()) {
				list.add(new Pedido(
						rs.getInt(PedidoPersistence.PRIMARYKEY),
						(Remedio) ddc.get(DDPersistence.REMEDIO, 
								rs.getInt("cod_remedio")),
						rs.getInt("quantidade")));
			}
			rs.close ();
			s.close ();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return list;
	}

	/* (non-Javadoc)
	 * @see drugdealer.persistencia.IPedidoPersistence#add(drugdealer.dados.Pedido)
	 */
	public void add(Pedido pedido) throws AlreadyExistsException {
		super.add("INSERT INTO " + PedidoPersistence.TABLENAME +
				" VALUES (NULL," + pedido.getRemedio().getCodigo() + "," +
				pedido.getQuantidade() + ")");
	}
	/* (non-Javadoc)
	 * @see drugdealer.persistencia.IPedidoPersistence#update(drugdealer.dados.Pedido)
	 */
	public void update(Pedido pedido) throws DoesNotExistsException {
		super.update("UPDATE " + TransacaoPersistence.TABLENAME + " SET " +
				"cod_remedio=" + pedido.getRemedio().getCodigo() + "," +
				"quantidade=" + pedido.getQuantidade() + "," +
				" WHERE " + 
				PedidoPersistence.PRIMARYKEY + "=" + pedido.getCodigo());
	}

	/* (non-Javadoc)
	 * @see drugdealer.persistencia.IPedidoPersistence#remove(drugdealer.dados.Pedido)
	 */
	public void remove(Pedido pedido) {
		super.remove(PedidoPersistence.TABLENAME, 
				PedidoPersistence.PRIMARYKEY, pedido.getCodigo());
	}

}
